/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.uoc.tfc.exuoc.model;

import javax.persistence.Embeddable;
import java.io.Serializable;
import javax.persistence.Column;
import edu.uoc.tfc.exuoc.config.Config;

/**
 * Model per les entitats que representen arxius físics.
 * Comentar sobre el tipus d'aquests arxiu:
 *  El tipus d'arxiu s'especifica amb una sola entrada de tipus String
 *  caldria, potser, expressar-ho com a un objecte nou segons s'especifica
 *  al document RFC/1522, WEB:http://www.rfc-editor.org/rfc/rfc1522.txt
 *  Aquest document informa, simplificant-ho que tenim un tipus base i un
 *  subtipus.Per posar un exemple, una imatge PNG tindria el següent format pel
 *  seu tipus ( de tipus MIME) : image/png.
 * Per no complicar encara més el projecte s'ha decidit utilitzar un format
 * simple en comptes d'una classe Tipus.
 *
 * @author emoreno
 */
@Embeddable
public class Arxiu implements Serializable{
    private String nom=Config.valorNullStr;
    private String tipus=Config.valorNullStr;
    private String ubicacio=Config.valorNullStr;
    private int mida=Config.valorNullInt; //Comment:Emili Antoni Moreno: La mida expressada en KB

    public Arxiu(){
    }

    /**
     *
     * @param nom
     * @param tipus
     * @param ubicacio
     * @param mida
     */
    public Arxiu(String nom, String tipus, String ubicacio, int mida) {
        this.nom = nom;
        this.tipus = tipus;
        this.ubicacio = ubicacio;
        this.mida = mida;
    }
   
    public int getMida() {
        return mida;
    }

    public void setMida(int mida) {
        this.mida = mida;
    }

    @Column(length=255)
    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    @Column(length=3)
    public String getTipus() {
        return tipus;
    }

    public void setTipus(String tipus) {
        this.tipus = tipus;
    }

    @Column(length=255)
    public String getUbicacio() {
        return ubicacio;
    }

    public void setUbicacio(String ubicacio) {
        this.ubicacio = ubicacio;
    }

   
 
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Arxiu other = (Arxiu) obj;
        if ((this.nom == null) ? (other.nom != null) : !this.nom.equals(other.nom)) {
            return false;
        }
        if ((this.tipus == null) ? (other.tipus != null) : !this.tipus.equals(other.tipus)) {
            return false;
        }
        if ((this.ubicacio == null) ? (other.ubicacio != null) : !this.ubicacio.equals(other.ubicacio)) {
            return false;
        }
        if (this.mida != other.mida) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (this.nom != null ? this.nom.hashCode() : 0);
        hash = 37 * hash + (this.tipus != null ? this.tipus.hashCode() : 0);
        hash = 37 * hash + (this.ubicacio != null ? this.ubicacio.hashCode() : 0);
        hash = 37 * hash + this.mida;
        return hash;
    }
    @Override
    public String toString(){
        String cad="";

        if (this.ubicacio != null ){
            cad=cad.concat(this.getUbicacio());
        }

        if (!this.ubicacio.endsWith(java.io.File.separator))
            cad=cad.concat(java.io.File.separator);
        if (this.nom != null ){
            cad=cad.concat(this.getNom());
        }
        if (this.tipus != null ){
            cad=cad.concat(":"+this.getTipus());
        }

        cad=cad.concat(":"+this.getMida()+"KB");



        return cad;
    }


}
